package com.xkcyy.one.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;

import cn.hutool.core.util.IdUtil;
import lombok.Data;

import java.time.LocalDateTime;

/**
 * 基础实体类
 * 包含所有实体类的公共字段
 */
@Data
public class BasicEntity {

    /**
     * 主键ID
     */
    @TableId(type = IdType.INPUT)
    private Long id;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    private LocalDateTime updateTime;

    public BasicEntity() {
        this.createTime = LocalDateTime.now();
        this.updateTime = LocalDateTime.now();
    }

    /**
     * 创建一个实体类
     * 
     * @param clazz 实体类类型
     * @return 创建的实体类
     */
    public static <T extends BasicEntity> T create(Class<T> clazz) {
        return create(clazz, IdUtil.getSnowflakeNextId());
    }

    /**
     * 创建一个实体类
     * 
     * @param clazz 实体类类型
     * @param id    主键ID
     * @return 创建的实体类
     */
    public static <T extends BasicEntity> T create(Class<T> clazz, Long id) {
        try {
            T entity = clazz.getDeclaredConstructor().newInstance();
            entity.setId(id);
            entity.setCreateTime(LocalDateTime.now());
            entity.setUpdateTime(LocalDateTime.now());
            return entity;
        } catch (Exception e) {
            throw new RuntimeException("Failed to create entity", e);
        }
    }

}